def time_format_converter():
    """地区时间格式转换器：支持8个国家/地区的时间格式转换"""
    print("=" * 50)
    print("          地区时间格式转换器（支持8个国家/地区）          ")
    print("=" * 50)
    
    # 1. 定义支持的地区及对应的时间格式（键：地区名称，值：格式字符串）
    area_formats = {
        "中国": "%Y年%m月%d日 %H:%M:%S",
        "美国": "%m/%d/%Y %H:%M:%S",
        "英国": "%d/%m/%Y %H:%M:%S",
        "德国": "%d.%m.%Y %H:%M:%S",
        "俄罗斯": "%d.%m.%Y %H:%M:%S",
        "澳大利亚": "%d/%m/%Y %H:%M:%S",
        "法国": "%d/%m/%Y %H:%M:%S",
        "加拿大": "%Y-%m-%d %H:%M:%S"
    }
    
    # 2. 显示支持的地区列表
    print("\n支持的地区：")
    for i, area in enumerate(area_formats.keys(), 1):
        print(f"  {i}. {area}")
    
    # 3. 用户输入地区（支持编号或名称）
    while True:
        area_input = input("\n请输入地区编号（1-8）或地区名称：").strip()
        # 处理编号输入
        if area_input.isdigit():
            area_index = int(area_input) - 1
            if 0 <= area_index < len(area_formats):
                selected_area = list(area_formats.keys())[area_index]
                break
            else:
                print("❌ 编号错误！请输入1-8之间的有效编号。")
        # 处理名称输入
        elif area_input in area_formats:
            selected_area = area_input
            break
        else:
            print("❌ 地区名称错误！请从支持的地区中选择（输入名称或编号）。")
    
    # 4. 用户输入时间信息（带合法性校验）
    def input_valid_number(prompt, min_val, max_val):
        """辅助函数：输入合法的数字（范围校验）"""
        while True:
            try:
                num = int(input(prompt).strip())
                if min_val <= num <= max_val:
                    return num
                else:
                    print(f"❌ 输入错误！请输入{min_val}-{max_val}之间的数字。")
            except ValueError:
                print("❌ 输入错误！请输入有效的整数。")
    
    print("\n请输入时间信息（24小时制）：")
    year = input_valid_number("年份（如2025）：", 1900, 2100)
    month = input_valid_number("月份（1-12）：", 1, 12)
    day = input_valid_number("日期（1-31）：", 1, 31)
    hour = input_valid_number("小时（0-23）：", 0, 23)
    minute = input_valid_number("分钟（0-59）：", 0, 59)
    second = input_valid_number("秒钟（0-59）：", 0, 59)
    
    # 5. 处理日期合法性（简单校验：避免31天的月份输入31日）
    months_30days = [4, 6, 9, 11]
    if month in months_30days and day == 31:
        print("⚠️  警告：该月份只有30天，已自动修正日期为30日")
        day = 30
    if month == 2:
        # 简单闰年判断（能被4整除但不能被100整除，或能被400整除）
        is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
        max_day = 29 if is_leap else 28
        if day > max_day:
            print(f"⚠️  警告：该年份2月只有{max_day}天，已自动修正日期为{max_day}日")
            day = max_day
    
    # 6. 构造时间元组，按选中地区格式格式化
    from datetime import datetime
    try:
        # 生成datetime对象（再次校验时间合法性）
        time_obj = datetime(year, month, day, hour, minute, second)
        # 获取对应地区的格式字符串
        target_format = area_formats[selected_area]
        # 格式化输出
        formatted_time = time_obj.strftime(target_format)
        
        # 7. 显示结果
        print("\n" + "=" * 50)
        print(f"转换结果：")
        print(f"输入时间：{year}年{month}月{day}日 {hour:02d}:{minute:02d}:{second:02d}")
        print(f"目标地区：{selected_area}")
        print(f"格式输出：{formatted_time}")
        print("=" * 50)
    except Exception as e:
        print(f"\n❌ 时间转换失败：{str(e)}")

# 运行转换器
if __name__ == "__main__":
    time_format_converter()